#include "Logger.h"

Logger::Logger(string archivoLog, int nivelLogging, string contexto) {
	this->archivoLog = archivoLog;
	this->nivelLogging = nivelLogging;
	this->contexto = contexto;
}

Logger::~Logger() {
}

string Logger::getTime(){
	time_t horaActual;
	time(&horaActual );
	string respuesta =  ctime(&horaActual);
	respuesta.erase(respuesta.size() - 1);
	return respuesta;
}

void Logger::logMsj(string msj) {
	fstream archivoSalida;
	archivoSalida.open(archivoLog.c_str() , fstream::out | fstream::app );

	if 	(!archivoSalida.good()){
		cout  << "ERROR: No se pudo acceder al archivo de Log desde " << contexto <<  endl;
		return;
	}

	archivoSalida << msj << endl;
	archivoSalida.close();
}

void Logger::logError(string msj) {
	stringstream ss;
	ss << getTime() << "\t" << "[ERROR]" << "\t" << "[" << contexto << "]" << "\t" <<msj;
	logMsj(ss.str());
}

void Logger::logInfo(string msj) {
	stringstream ss;
	ss << getTime() << "\t" << "[INFO]"<< "\t" << "[" << contexto << "]" << "\t" <<msj;
	logMsj(ss.str());
}

void Logger::logDebugAltoNivel(string msj) {
	if(nivelLogging >= 1){
		stringstream ss;
		ss << getTime() << "\t" << "[DEBUG]"<< "\t" << "[" << contexto << "]" << "\t" <<msj;
		logMsj(ss.str());
	}
}

void Logger::logDebugNivelMedio(string msj) {
	if(nivelLogging >= 2){
		stringstream ss;
		ss << getTime() << "\t" <<  "[DEBUG]"<< "\t" << "[" << contexto << "]" << "\t" <<msj;
		logMsj(ss.str());
	}
}

void Logger::logDebugBajoNivel(string msj) {
	if(nivelLogging == 3){
		stringstream ss;
		ss << getTime() << "\t" << "[DEBUG]"<< "\t" << "[" << contexto << "]" << "\t" <<msj;
		logMsj(ss.str());
	}
}

void Logger::vaciarLog() {
	fstream archivoSalida;
	archivoSalida.open(archivoLog.c_str() , ios::out | ios::in | ios::trunc );
	if 	(!archivoSalida.good()){
		cout  << "ERROR: No se pudo vaciar el archivo de Log desde " << contexto <<  endl;
	}
	archivoSalida.close();
}
